home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
TPUG - Toronto PET Users Group
/
TPUG Users Group CD
/
TPUG Users Group CD.iso
/
AMIGA
/
(A)E
/
(A)E1.ADF
/
MathsAdv
/
TMA.c
< prev
next >
Wrap
C/C++ Source or Header
|
1996-10-13
|
26KB
|
1,327 lines
#include <intuition/intuition.h>
#include <graphics/sprite.h>
#include "crc"
#include "includesound.h"
#define HEIGHT 200
#define WIDTH 640
#define DEPTH 4
extern struct Image title;
extern struct Image ask;
extern struct Image rooms;
extern struct Image question;
extern struct Image square1;
extern struct Image square2;
extern struct Image square3;
extern struct Image start;
extern char Room1[34][70];
extern char Room5[21][70];
extern char Room6[40][57];
extern char Room2[24][72];
extern char Room3[22][70];
extern char Room7[26][70];
extern char Room4[26][70];
extern char Room8[34][70];
extern char Room9[35][70];
extern char LASTROOM[21][100];
extern char LastROOM[5][100];
extern struct SoundInfo lefty;
extern struct SoundInfo bad;
extern struct SoundInfo good;
extern struct Image tri1;
extern struct Image tri2;
extern struct Image tri3;
struct Window *win;
struct Screen *scr;
struct IntuitionBase *IntuitionBase;
struct GfxBase *GfxBase;
struct ViewPort *vp;
struct RastPort *rp;
struct IntuiMessage *message;
USHORT class;
USHORT code;
struct NewScreen ns =
{ 0,0,WIDTH,HEIGHT,4,0,1,HIRES, /* View modes */
CUSTOMSCREEN, /* Screen type */
NULL, /* Font */
NULL,NULL,NULL /* CustomBitmap */ };
struct NewWindow nw =
{ 0,0,WIDTH,HEIGHT,0,1,MOUSEBUTTONS+RAWKEY, /* IDCMP flags */
ACTIVATE|BORDERLESS|RMBTRAP, /* Flags */
NULL,NULL,NULL, /* Gadget,Checkmark,Name */
NULL,NULL, /* Screen,BitMap */
WIDTH,HEIGHT,100,100, /* Max Width,Height, Min Width,Height */
CUSTOMSCREEN };
char children[7][10]={"KIM","ROSEMARIE","ROBERT","SANDRA","SIMON","TERRY","MELINDA" };
char r1[100],r2[100],r3[100],r4[100],users_input[20],correct_answer[20];
char r5[100],r6[100];
int d,e;
UWORD DUMMY_SPRITE_DATA[]={ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000 };
main(int argc, char *argv[])
{
int input=1;
Open_Stuff();
GetSprite(&cross,2);
SetPointer(win,DUMMY_SPRITE_DATA,1,1,0,0);
InitScreenI();
DrawImage(rp,&start,51,51);
Delay(25);
StopSound(RIGHT1);
PlaySound(&lefty,MAXVOLUME,RIGHT1,NORMALRATE,1,0,0);
while(input)
{
while((d=idcmpch())==0);
if(d==-1) input=0;
}
SetAPen(rp,0);
RectFill(rp,1,38,638,198);
InitScreenII();
while(1)
{
DrawImage(rp,&ask,100,92);
while((input=idcmpch())==0);
if(input==0x19) { MathsAdventure(); ClearAll(); }
else if(input==0x10) die("");
ClearBORDER();
MoveBorder(1);
}
die("");
}
DisplayEnd(){}
ClearBORDER()
{
ChangeSprite(vp,&cross,dummy_data);
}
RenewBORDER()
{
ChangeSprite(vp,&cross,sprite_data);
}
/***************************************************************************/
/***************************************************************************/
MathsAdventure()
{
int room=1,result;
ClearAll();
MoveBorder(room);
RenewBORDER();
MoveBorder(room);
result=EnterRoom(room);
if(!result) { DisplayEnd(); return(0); }
while(1)
{
ClearAll();
room=GetRoom(room);
MoveBorder(room);
result=EnterRoom(room);
if(!result) { DisplayEnd(); return(0); }
}
}
/***************************************************************************/
/***************************************************************************/
RETURN()
{
int i;
SetAPen(rp,3);
WRITEIN("[RETURN]",385,170);
while(1)
{
while((i=idcmpch())==0);
if(i==0x44||i==0x43) return(0);
}
}
/***************************************************************************/
/***************************************************************************/
EnterRoom1()
{
int x,q;
char buf1[60],answer[10],input[15];
q=rand()%3+1;
if(q==1)
{
strcpy(buf1,"product of 9 and 12.");
strcpy(answer,"");
}
else if(q==2)
{
strcpy(buf1,"sum of 14,15 and 16.");
strcpy(answer,"");
}
else
{
strcpy(buf1,"difference between 99 and 1001.");
strcpy(answer,"");
}
ClearBox1();
SetAPen(rp,8);
for(x=0;x<8;x++)
WRITEIN(Room1[x],14,100+(10*x));
RETURN();
ClearBox1();
SetAPen(rp,8);
for(x=8;x<15;x++)
WRITEIN(Room1[x],14,100+(10*(x-8)));
RETURN();
ClearBox1();
SetAPen(rp,8);
for(x=15;x<22;x++)
WRITEIN(Room1[x],14,100+(10*(x-15)));
WRITEIN(buf1,14,170);
GetAnswer(input);
ClearBox1();
SetAPen(rp,8);
if(strcmp(input,answer)==0)
{
IsCorrect(1);
for(x=22;x<26;x++)
WRITEIN(Room1[x],14,120+(10*(x-22)));
RETURN();
return(1);
}
else
{
IsCorrect(0);
for(x=26;x<34;x++)
WRITEIN(Room1[x],14,100+(10*(x-26)));
RETURN();
return(0);
}
}
/***************************************************************************/
/***************************************************************************/
EnterRoom2()
{
ClearAll();
strcpy(r2,"have? '");
d=rand()%3+1;
if(d==1)
{
strcpy(r1,"problem goes like this, how many sides does a pentagon");
strcpy(correct_answer,"");
}
else if(d==2)
{
strcpy(r1,"problem goes like this, how many sides does a hexagon");
strcpy(correct_answer,"");
}
else
{
strcpy(r1,"problem goes like this, how many edges does a cube ");
strcpy(correct_answer,"");
}
SetAPen(rp,8);
for(d=0;d<7;d++)
WRITEIN(Room2[d],14,100+(d*10));
RETURN();
ClearBox1();
SetAPen(rp,8);
for(d=7;d<12;d++)
WRITEIN(Room2[d],14,((d-7)*10)+105);
WRITEIN(r1,14,155);
WRITEIN(r2,14,165);
GetAnswer(users_input);
if(strcmp(users_input,correct_answer)==0)
{
ClearBox1();
IsCorrect(1);
for(d=12;d<16;d++)
WRITEIN(Room2[d],14,((d-11)*10)+115);
RETURN();
return(1);
}
else
{
ClearBox1();
IsCorrect(0);
for(d=17;d<24;d++)
WRITEIN(Room2[d],14,((d-17)*10)+100);
RETURN();
return(0);
}
}
/*************************************************************************/
/*************************************************************************/
/*************************************************************************/
/*************************************************************************/
EnterRoom3()
{
ClearAll();
d=rand()%3+1;
if(d==1)
{
strcpy(r1,"between the hands of a clock at 3:00pm ?'");
strcpy(correct_answer,"");
}
else if(d==2)
{
strcpy(r1,"between the hands of a clock at 7:00pm ?'");
strcpy(correct_answer,"");
}
else
{
strcpy(r1,"between the hands of a clock at 8:00pm ?'");
strcpy(correct_answer,"");
}
SetAPen(rp,8);
for(d=0;d<8;d++)
WRITEIN(Room3[d],14,100+(d*10));
RETURN();
ClearBox1();
SetAPen(rp,8);
for(d=8;d<13;d++)
WRITEIN(Room3[d],14,((d-7)*10)+105);
WRITEIN(r1,14,165);
GetAnswer(users_input);
if(strcmp(users_input,correct_answer)==0)
{
ClearBox1();
IsCorrect(1);
for(d=13;d<17;d++)
WRITEIN(Room3[d],14,((d-12)*10)+115);
RETURN();
return(1);
}
else
{
ClearBox1();
IsCorrect(0);
for(d=17;d<22;d++)
WRITEIN(Room3[d],14,((d-16)*10)+115);
RETURN();
return(0);
}
}
/***************************************************************************/
/***************************************************************************/
EnterRoom4()
{
ClearAll();
d=rand()%3+1;
if(d==1)
strcpy(correct_answer,"");
else if(d==2)
strcpy(correct_answer,"");
else
strcpy(correct_answer,"");
e=d;
SetAPen(rp,8);
for(d=0;d<8;d++)
WRITEIN(Room4[d],14,100+(d*10));
RETURN();
ClearBox1();
SetAPen(rp,8);
for(d=8;d<11;d++)
WRITEIN(Room4[d],14,((d-8)*10)+140);
if(e==1)
DrawImage(rp,&square1,205,95);
else if(e==2)
DrawImage(rp,&square2,203,95);
else DrawImage(rp,&square3,181,95);
GetAnswer(users_input);
if(strcmp(users_input,correct_answer)==0)
{
ClearBox1();
IsCorrect(1);
for(d=11;d<19;d++)
WRITEIN(Room4[d],14,((d-11)*10)+100);
RETURN();
return(1);
}
else
{
ClearBox1();
IsCorrect(0);
for(d=19;d<26;d++)
WRITEIN(Room4[d],14,((d-19)*10)+100);
RETURN();
return(0);
}
}
/***************************************************************************/
/***************************************************************************/
EnterRoom5()
{
ClearAll();
d=rand()%3+1;
if(d==1)
{
strcpy(r1,"deal with this room. Ok. I'm thinking of a number. If");
strcpy(r2,"you double it, add 5, subtract 6, divide by 5 then");
strcpy(r3,"finally add the number I'm thinking of, you'll get 18.");
strcpy(r4,"What number am I thinking of ?'");
strcpy(correct_answer,"");
}
else if(d==2)
{
strcpy(r1,"deal with this room. Ok. I'm thinking of two numbers.");
strcpy(r2,"Their sum is 28 more than their difference. What is the");
strcpy(r3,"smaller number?'");
strcpy(r4,"");
strcpy(correct_answer,"");
}
else
{
strcpy(r1,"deal with this room. Ok. I'm thinking of two numbers.");
strcpy(r2,"Their average is 40 greater than the smallest number");
strcpy(r3,"and their sum is 280. What is the larger number?'");
strcpy(r4,"");
strcpy(correct_answer,"");
}
SetAPen(rp,8);
for(d=0;d<8;d++)
WRITEIN(Room5[d],14,100+(d*10));
RETURN();
ClearBox1();
SetAPen(rp,8);
for(d=8;d<10;d++)
WRITEIN(Room5[d],14,((d-8)*10)+105);
WRITEIN(r1,14,125);
WRITEIN(r2,14,135);
WRITEIN(r3,14,145);
WRITEIN(r4,14,155);
GetAnswer(users_input);
if(strcmp(users_input,correct_answer)==0)
{
ClearBox1();
IsCorrect(1);
for(d=15;d<21;d++)
WRITEIN(Room5[d],14,((d-16)*10)+115);
RETURN();
return(1);
}
else
{
ClearBox1();
IsCorrect(0);
for(d=10;d<15;d++)
WRITEIN(Room5[d],14,((d-10)*10)+110);
RETURN();
return(0);
}
}
/***************************************************************************/
/***************************************************************************/
EnterRoom6()
{
d=rand()%3+1;
if(d==1)
{
strcpy(r1," At a party 66 handshakes were exchanged. If each");
strcpy(r2,"person shook hands with each other exactly once, how");
strcpy(r3,"many people were present at the party?");
strcpy(correct_answer,"");
}
else if(d==2)
{
strcpy(r1," How many solid cubes of side length 2cm can be made");
strcpy(r2,"from a solid block of wood measuring 4cm by 8cm by 2cm?");
strcpy(r3,"");
strcpy(correct_answer,"");
}
else
{
strcpy(r1," A cube of side length 8cm is made up of individual");
strcpy(r2,"1cm cubes. How many of these 1cm cubes are face-to-face");
strcpy(r3,"with exactly four other 1cm cubes?");
strcpy(correct_answer,"");
}
for(d=0;d<3;d++)
{
ClearBox1();
SetAPen(rp,8);
for(e=d*8;e<(d*8+8);e++)
WRITEIN(Room6[e],14,((e-(d*8))*10)+100);
RETURN();
}
ClearBox1();
SetAPen(rp,8);
WRITEIN(Room6[24],14,125);
WRITEIN(r1,14,135);
WRITEIN(r2,14,145);
WRITEIN(r3,14,155);
GetAnswer(users_input);
if(strcmp(users_input,correct_answer)==0)
{
ClearBox1();
IsCorrect(1);
for(d=25;d<33;d++)
WRITEIN(Room6[d],14,((d-25)*10)+100);
RETURN();
return(1);
}
else
{
ClearBox1();
IsCorrect(0);
for(d=33;d<40;d++)
WRITEIN(Room6[d],14,((d-33)*10)+100);
RETURN();
return(0);
}
}
/***************************************************************************/
/***************************************************************************/
EnterRoom7()
{
ClearAll();
d=rand()%3+1;
if(d==1)
{
strcpy(correct_answer,"");
}
else if(d==2)
{
strcpy(correct_answer,"");
}
else
{
strcpy(correct_answer,"");
}
e=d;
SetAPen(rp,8);
for(d=0;d<8;d++)
WRITEIN(Room7[d],14,100+(d*10));
RETURN();
ClearBox1();
if(e==1) DrawImage(rp,&tri1,176,95);
else if(e==2) DrawImage(rp,&tri2,156,95);
else DrawImage(rp,&tri3,158,95);
SetAPen(rp,8);
for(d=8;d<11;d++)
WRITEIN(Room7[d],14,140+((d-8)*10));
GetAnswer(users_input);
if(strcmp(users_input,correct_answer)==0)
{
ClearBox1();
IsCorrect(1);
for(d=11;d<18;d++)
WRITEIN(Room7[d],14,((d-11)*10)+100);
RETURN();
return(1);
}
else
{
ClearBox1();
IsCorrect(0);
for(d=18;d<26;d++)
WRITEIN(Room7[d],14,((d-18)*10)+100);
RETURN();
return(0);
}
}
/***************************************************************************/
/***************************************************************************/
EnterRoom8()
{
ClearAll();
strcpy(correct_answer,"");
SetAPen(rp,8);
for(d=0;d<8;d++)
WRITEIN(Room8[d],14,100+(d*10));
RETURN();
ClearBox1();
SetAPen(rp,8);
for(d=8;d<14;d++)
WRITEIN(Room8[d],14,100+((d-7)*10));
RETURN();
ClearBox1();
SetAPen(rp,8);
for(d=14;d<22;d++)
WRITEIN(Room8[d],14,100+((d-14)*10));
GetAnswer(users_input);
if(strcmp(users_input,correct_answer)==0)
{
ClearBox1();
IsCorrect(1);
for(d=22;d<28;d++)
WRITEIN(Room8[d],14,((d-22)*10)+105);
RETURN();
return(1);
}
else
{
ClearBox1();
IsCorrect(0);
for(d=28;d<34;d++)
WRITEIN(Room8[d],14,((d-28)*10)+105);
RETURN();
return(0);
}
}
/***************************************************************************/
/***************************************************************************/
EnterRoom9()
{
ClearAll();
d=rand()%3+1;
if(d==1)
strcpy(correct_answer,"");
else
strcpy(correct_answer,"");
e=d;
SetAPen(rp,8);
for(d=0;d<8;d++)
WRITEIN(Room9[d],14,100+(d*10));
RETURN();
ClearBox1();
SetAPen(rp,8);
for(d=8;d<16;d++)
WRITEIN(Room9[d],14,((d-8)*10)+100);
RETURN();
ClearBox1();
SetAPen(rp,8);
if(e==1)
for(d=16;d<20;d++)
WRITEIN(Room9[d],14,((d-15)*10)+100);
else
for(d=20;d<27;d++)
WRITEIN(Room9[d],14,((d-19)*10)+100);
GetAnswer(users_input);
if(strcmp(users_input,correct_answer)==0)
{
ClearBox1();
IsCorrect(1);
for(d=30;d<34;d++)
WRITEIN(Room9[d],14,((d-29)*10)+100);
RETURN();
return(1);
}
else
{
ClearBox1();
IsCorrect(0);
for(d=27;d<30;d++)
WRITEIN(Room9[d],14,((d-25)*10)+100);
RETURN();
return(0);
}
}
/***************************************************************************/
/***************************************************************************/
LastRoom()
{
char buf[100];
int across,dummy=1,x,dummy2=1,a[10];
ClearBORDER();
MakeWay();
SetAPen(rp,8);
for(x=0;x<5;x++)
WRITEIN(LastROOM[x],20,50+(10*x));
WRITEIN("JUST PRESS 'Y' or 'N' for your answer. (No need to press RETURN).",58,105);
while(dummy)
{
for(x=0;x<7;x++)
{
sprintf(buf,"Does %s catch the train?",children[x]);
across=350-(strlen(buf)*8);
SetAPen(rp,11);
WRITEIN(buf,across,120+(10*x));
dummy2=1;
while(dummy2)
{
across=idcmpch();
if(across==0x15) { a[x]=1; strcpy(buf,"Yes"); dummy2=0; SetAPen(rp,3); }
else if(across==0x36) { a[x]=0; strcpy(buf,"No"); dummy2=0; SetAPen(rp,9);}
}
WRITEIN(buf,360,120+(10*x));
}
SetAPen(rp,8);
WRITEIN("Is this correct??? (Y/N)",220,190);
dummy2=1;
while(dummy2)
{
across=idcmpch();
if(across==0x15) { dummy=0; dummy2=0; }
else if(across==0x36)
{
dummy2=0;
SetAPen(rp,0);
RectFill(rp,20,110,630,190);
}
}
}
ClearBig();
if(MONKEYS LIKE BANANAS)
{
SetAPen(rp,8);
for(d=0;d<15;d++)
WRITEIN(LASTROOM[d],35,50+(10*d));
SetAPen(rp,3);
WRITEIN("[RETURN]",500,170);
while(1)
{
while((d=idcmpch())==0);
if(d==0x44||d==0x43) { ClearBig(); InitScreenI(); InitScreenII(); return(0); }
}
}
else
{
SetAPen(rp,9);
for(d=15;d<21;d++)
WRITEIN(LASTROOM[d],20,70+(10*(d-15)));
SetAPen(rp,3);
WRITEIN("[RETURN]",500,140);
while(1)
{
while((d=idcmpch())==0);
if(d==0x44||d==0x43) { ClearBig(); InitScreenI(); InitScreenII(); return(0); }
}
}
}
/***************************************************************************/
/***************************************************************************/
InitScreenI()
{
int s,m;
CurrentTime(&s,&m);
srand(999*s+9*m+9);
SetRGB4(vp,1,0xB,0xB,0xB);
SetRGB4(vp,2,0x0,0x0,0xF);
SetRGB4(vp,3,0x0,0xF,0x0);
SetRGB4(vp,4,0x0,0x0,0xF);
SetRGB4(vp,5,0x5,0x5,0x5);
SetRGB4(vp,6,0x8,0x8,0x8);
SetRGB4(vp,7,0xC,0xC,0xC);
SetRGB4(vp,8,0x8,0xC,0xF);
SetRGB4(vp,9,0xF,0x0,0x0);
SetRGB4(vp,10,0xF,0x0,0x0);
SetRGB4(vp,11,0x3,0x3,0xF);
SetRGB4(vp,21,0x0,0x0,0xF);
SetAPen(rp,0);
RectFill(rp,8,40,638,195);
SetAPen(rp,2);
Move(rp,0,0);
Draw(rp,639,0);
Draw(rp,639,199);
Draw(rp,0,199);
Draw(rp,0,0);
DrawImage(rp,&title,28,1);
}
InitScreenII()
{
SetAPen(rp,2);
Move(rp,8,90);
Draw(rp,458,90);
Draw(rp,458,176);
Draw(rp,8,176);
Draw(rp,8,90);
Move(rp,465,90);
Draw(rp,631,90);
Draw(rp,631,195);
Draw(rp,465,195);
Draw(rp,465,90);
Move(rp,8,179);
Draw(rp,458,179);
Draw(rp,458,195);
Draw(rp,8,195);
Draw(rp,8,179);
Move(rp,78,40);
Draw(rp,562,40);
Draw(rp,562,86);
Draw(rp,78,86);
Draw(rp,78,40);
DrawImage(rp,&rooms,118,44);
}
/*************************************************************************/
/*************************************************************************/
/*************************************************************************/
/*************************** ************************/
/*************************** Functions.... ************************/
/*************************** ************************/
/*************************************************************************/
/*************************************************************************/
/*************************************************************************/
int idcmpch()
{
if(win->UserPort->mp_SigBit)
if(message=(struct IntuiMessage *)GetMsg(win->UserPort))
{
class=message->Class;
code=message->Code;
ReplyMsg((struct IntuiMessage *)message);
switch(class)
{
case MOUSEBUTTONS:
switch(code)
{
case SELECTDOWN:
return(-1);
}
case RAWKEY:
return((int)code);
}
}
return(0); /* Nothing interesting! */
}
Open_Stuff()
{
void *OpenLibrary();
struct Window *OpenWindow();
struct Screen *OpenScreen();
if(!(IntuitionBase=(struct IntuitionBase *)OpenLibrary("intuition.library",0)))
die(" Can't open intuition.library");
if(!(GfxBase=(struct GfxBase *)OpenLibrary("graphics.library",0)))
die(" Can't open graphics library");
if((scr=OpenScreen(&ns))==NULL)
die(" NOT ENOUGH MEMORY!!!");
nw.Screen=scr;
if(!(win=(struct Window *)OpenWindow(&nw)))
die(" NOT ENOUGH MEMORY!!!");
rp=win->RPort;
vp=&scr->ViewPort;
SetRGB4(vp,0,0,0,0);
return(TRUE);
}
die(s)
char *s[];
{
char Alert[300];
register int loop;
if(strlen(s)!=0) /* Display alert if s isn't NULL */
{
memset((void *)Alert,0,sizeof(Alert));
strcat(Alert,s);
strcat(Alert," Press either mouse button to continue.");
loop=strlen(s);
Alert[0]=0; Alert[1]=32; Alert[2]=16;
Alert[loop+2]='\0'; Alert[loop+3]=TRUE;
Alert[loop+4]=0; Alert[loop+5]=32; Alert[loop+6]=32;
Alert[loop+45]='\0'; Alert[loop+46]=FALSE;
DisplayAlert(RECOVERY_ALERT,Alert,48);
}
if(cross.num!=-1) FreeSprite(2);
StopSound(RIGHT1);
StopSound(LEFT0);
if(win) CloseWindow(win);
if(scr) CloseScreen(scr);
if(GfxBase) CloseLibrary(GfxBase);
if(IntuitionBase) CloseLibrary(IntuitionBase);
exit();
return(TRUE);
}
GetAnswer(char answer[])
{
int dummy=1,maindummy=1,i=0,w=0,decimal=0,start,end;
char input[20],final[20];
memset((void *)final,0,sizeof(final));
DrawImage(rp,&question,466,91);
SetAPen(rp,8);
while(maindummy)
{
memset((void *)input,0,sizeof(input));
w=0;
decimal=0;
dummy=1;
Move(rp,508,179);
Text(rp," ",10);
Move(rp,473,190);
Text(rp," ",19);
while(dummy)
{
while((i=idcmpch())==0);
if(w<10)
{
if( i>=0x01 && i<=0x0A )
if(i==0x0A) input[w++]='0'; else input[w++]=48+i;
if( i>=0x1D && i<=0x1F )
input[w++]=i-0x1D+49;
else if( i>=0x2D && i<=0x2F )
input[w++]=i-0x2D+52;
else if( i>=0x3D && i<=0x3F )
input[w++]=i-0x3D+55;
else if( i==0x0F ) input[w++]='0';
}
if(!decimal)
if( i==0x3C || i==0x39)
{
input[w++]='.';
decimal=1;
}
Move(rp,508,179);
Text(rp,input,strlen(input));
if(i==0x41 && w>0)
{
if(input[w-1]=='.') decimal=0;
Move(rp,8*w+500,179);
Text(rp," ",1);
input[--w]='\0';
}
if(i==0x44||i==0x43) dummy=0;
}
dummy=1;
Move(rp,473,190);
Text(rp,"Are you sure? (Y/N)",19);
while(dummy)
{
while((i=idcmpch())==0);
if(i==0x15) { dummy=0; maindummy=0; }
else if(i==0x36) dummy=0;
}
}
start=0;
while(input[start++]=='0');
if(decimal)
{
end=strlen(input)-1;
if(input[end]=='0')
while(input[end--]=='0');
} else end=strlen(input)-1;
--start;
for(i=start,w=0;i<=end;i++,w++)
final[w]=input[i];
if(final[strlen(final)-1]=='.') final[strlen(final)-1]='\0';
strcpy(answer,final);
}
GetRoom(int ro)
{
int i,dummy=1,maindummy=1,w=0,correct1,correct2;
char r[10];
ClearBox1();
if(ro==1) { correct1=2; correct2=3; }
else if(ro==2||ro==3) { correct1=4; correct2=4; }
else if(ro==4) { correct1=5; correct2=6; }
else if(ro==5||ro==6) { correct1=7; correct2=7; }
else if(ro==7) { correct1=8; correct2=8; }
else if(ro==8) { correct1=9; correct2=9; }
else if(ro==9) { correct1=10; correct2=10; }
SetAPen(rp,8);
Move(rp,105,120);
Text(rp,"Which room shall you enter next.",32);
while(maindummy)
{
Move(rp,224,130); Text(rp," ",5);
Move(rp,145,140); Text(rp," ",23);
w=0;
memset((void *)r,0,sizeof(r));
dummy=1;
SetAPen(rp,9);
while(dummy)
{
while((i=idcmpch())==0);
if(w<2)
if(i>=0x00 && i<=0x0A)
{
if(i==0x0A)
{
if(r[0]=='1') r[w++]='0';
}
else if(w==0) r[w++]=i+48;
}
else if(w==0)
{
if( i>=0x1D && i<=0x1F ) r[w++]=i-0x1E+50;
else if(i>=0x2D&&i<=0x2F) r[w++]=i-0x2D+52;
else if(i>=0x3D&&i<=0x3F) r[w++]=i-0x3D+55;
}
else if(r[0]=='1'&&i==0x0F) r[w++]='0';
if(i==0x41&&w>0)
if(w==2)
{
w=1;
r[1]='\0';
Move(rp,232,130); Text(rp," ",2);
}
else
{
w=0;
r[0]='\0';
Move(rp,224,130); Text(rp," ",2);
}
if(i==0x44||i==0x43) if(w>0) dummy=0;
Move(rp,224,130); Text(rp,r,strlen(r));
}
SetAPen(rp,8);
Move(rp,145,140);
Text(rp,"Is this correct? (Y/N)",22);
dummy=1;
while(dummy)
{
while((i=idcmpch())==0);
if(i==0x15) { maindummy=0; dummy=0; }
else if(i==0x36) dummy=0;
}
if(r[0]=='0') { r[0]=r[1]; r[1]='\0'; }
dummy=atoi(r);
if(dummy!=correct1&&dummy!=correct2)
if(maindummy==0)
{
Move(rp,93,150);
Text(rp,"You can't enter that room! [RETURN]",35);
while(1)
{
dummy=idcmpch();
if(dummy==0x43||dummy==0x44) break;
}
maindummy=1;
Move(rp,93,150);
Text(rp," ",35);
}
}
ClearBox1();
return(atoi(r));
}
MoveBorder(int r)
{
if(r==2) MoveSprite(0,&cross,83,44);
else if(r==3) MoveSprite(0,&cross,83,65);
else if(r==4) MoveSprite(0,&cross,108,54);
else if(r==5) MoveSprite(0,&cross,133,44);
else if(r==6) MoveSprite(0,&cross,133,65);
else if(r==7) MoveSprite(0,&cross,158,54);
else if(r==8) MoveSprite(0,&cross,183,54);
else if(r==9) MoveSprite(0,&cross,208,54);
else if(r==10) MoveSprite(0,&cross,238,54);
else MoveSprite(0,&cross,58,54);
}
ClearBox1()
{
SetAPen(rp,0);
RectFill(rp,9,91,457,175);
}
ClearBox2()
{
SetAPen(rp,0);
RectFill(rp,9,180,457,194);
}
ClearBox3()
{
SetAPen(rp,0);
RectFill(rp,466,91,630,194);
}
ClearAll()
{
ClearBox1();
ClearBox2();
ClearBox3();
}
WRITEIN(char s[],int x,int y)
{
Move(rp,x,y);
Text(rp,s,strlen(s));
}
MakeWay()
{
SetAPen(rp,0);
Move(rp,0,0);
Draw(rp,639,0);
Draw(rp,639,199);
Draw(rp,0,199);
Draw(rp,0,0);
Move(rp,8,90);
Draw(rp,458,90);
Draw(rp,458,176);
Draw(rp,8,176);
Draw(rp,8,90);
Move(rp,465,90);
Draw(rp,631,90);
Draw(rp,631,195);
Draw(rp,465,195);
Draw(rp,465,90);
Move(rp,8,179);
Draw(rp,458,179);
Draw(rp,458,195);
Draw(rp,8,195);
Draw(rp,8,179);
Move(rp,78,40);
Draw(rp,562,40);
Draw(rp,562,86);
Draw(rp,78,86);
Draw(rp,78,40);
SetAPen(rp,0);
RectFill(rp,9,41,623,145);
SetAPen(rp,2);
Move(rp,8,40);
Draw(rp,631,40);
Draw(rp,631,195);
Draw(rp,8,195);
Draw(rp,8,40);
}
EnterRoom(int r)
{
if(r==1) return(EnterRoom1());
else if(r==2) return(EnterRoom2());
else if(r==3) return(EnterRoom3());
else if(r==4) return(EnterRoom4());
else if(r==5) return(EnterRoom5());
else if(r==6) return(EnterRoom6());
else if(r==7) return(EnterRoom7());
else if(r==8) return(EnterRoom8());
else if(r==9) return(EnterRoom9());
else LastRoom();
}
IsCorrect(int r)
{
int i=1,dummy=1;
char correct[20];
if(r==1) strcpy(correct,"CORRECTLY"); else strcpy(correct,"INCORRECTLY");
SetAPen(rp,8);
Move(rp,72,190);
Text(rp,"You answered that question",26);
if(r==1) SetAPen(rp,3); else SetAPen(rp,9);
Move(rp,297,190);
Delay(75);
Text(rp,correct,strlen(correct));
if(r==1) PlayGOOD(); else PlayBAD();
Delay(25);
}
ClearBig()
{
SetAPen(rp,0);
RectFill(rp,9,41,630,194);
}
PlayGOOD()
{
StopSound(LEFT0);
PlaySound(&good,MAXVOLUME,RIGHT1,NORMALRATE,1,0,0);
}
PlayBAD()
{
StopSound(LEFT0);
PlaySound(&bad,MAXVOLUME,RIGHT1,NORMALRATE,1,0,0);
}